(function ($) {
    $.fn.serializeFormJSON = function () {
        var o = {};
        var a = this.serializeArray();
        $.each(a, function () {
            if (o[this.name]) {
                if (!o[this.name].push) {
                    o[this.name] = [o[this.name]];
                }
                o[this.name].push(this.value || '');
            } else {
                o[this.name] = this.value || '';
            }
        });
        return o;
    };

    var page = {
        init: function () {
            var that = this;

            that.reloadTable();

            $('.table-search').click(function () {
                that.tableSearch();
            });

            $('.reset-search').click(function () {
                that.resetSearch();
            });

            $('#addObjModal').on('show.bs.modal', function (event) {
                var button = $(event.relatedTarget);
                var modal = $(this);
                $("#addObjForm input").val("");
            });

            $('#updateObjModal').on('show.bs.modal', function (event) {
                var button = $(event.relatedTarget);
                var modal = $(this);

                var selRows = $("#tb_base").bootstrapTable('getSelections');

                if (selRows.length == 0) {
                    layer.msg("请至少选择一行数据");
                    return false;
                }
                console.log(selRows);

                modal.find('#id').val(selRows[0].id);
                modal.find('#name').val(selRows[0].name);
                modal.find('#remark').val(selRows[0].remark);

                $.ajax({
                    type: "get",
                    url: "/menus/checkedMenuTree",
                    cache: false,
                    data: {roleId: selRows[0].id},
                    dataType: "json",
                    contentType: 'application/json;charset=utf-8',
                    success: function (data) {
                        if (data.code == "0") {
                            // 正确的其他处理...
                            var options = {
                                levels: 1,// 树形默认展开几级
                                showTags: true,//显示子节点数
                                data: data.tree,
                                checkedIcon: "mdi mdi-checkbox-marked-outline",
                                uncheckedIcon: "mdi mdi-checkbox-blank-outline",
                                // partiallyCheckedIcon: "mdi mdi-checkbox-intermediate",
                                partiallyCheckedIcon: "mdi mdi-square-inc",
                                collapseIcon: "mdi mdi-folder-open",//可收缩的节点图标
                                emptyIcon: "",//设置列表树中没有子节点的节点的图标 "mdi mdi-file-outline"
                                expandIcon: "mdi mdi-folder-outline",  //设置列表上中有子节点的图标
                                highlightSelected: true,     //是否选中高亮显示
                                showIcon: false, // 不显示图标
                                showCheckbox: true,
                                multiSelect: true,    //多选
                                hierarchicalCheck: true,
                                propagateCheckEven: true
                            };
                            $('#updateTree').treeview(options);
                            // $('#updateTree').treeview({data:data.tree});
                            var checkedData = $('#updateTree').treeview('getChecked');
                            $('#updateTree').treeview('checkNode', [checkedData, {silent: true}]);
                            // console.log(checkedData);
                            // var ids = checkedData.map(function (item) {
                            //     return item.id;
                            // });
                            // console.log(ids);

                        } else {
                            // 错误的其他处理...
                            layer.msg(data.msg, {icon: 5});

                        }
                    },
                    error: function (E) {
                        console.log(E);
                        layer.msg('提交系统失败，请稍后再试', {icon: 2});
                    }
                });
            });

            $('.collapse-all-btn').click(function () {
                $('#updateTree').treeview('collapseAll', {silent: true});
                return false;
            });

            $('.expand-all-btn').click(function () {
                $('#updateTree').treeview('expandAll', {silent: true});
                return false;
            });

            $('.add-obj-btn').on('click', function () {
                // var data = $('#defaultForm').serialize(); // 类似get的url拼参数方式，需要转换json
                var data = $('#addObjForm').serializeFormJSON();
                console.log(data);

                $.ajax({
                    type: "post",
                    url: "/roles",
                    cache: false,
                    data: JSON.stringify(data),
                    dataType: "json",
                    contentType: 'application/json;charset=utf-8',
                    success: function (data) {
                        if (data.code == "0") {
                            // 正确的其他处理...
                            layer.msg(data.msg, {icon: 6});
                            $("#tb_base").bootstrapTable('refresh');
                            $('#addObjModal').modal('hide');
                        } else {
                            // 错误的其他处理...
                            layer.msg(data.msg, {icon: 5});
                            $("#tb_base").bootstrapTable('refresh');
                        }
                    },
                    error: function (E) {
                        console.log(E);
                        layer.msg('提交系统失败，请稍后再试', {icon: 2});
                    }
                });
            });

            $('.update-obj-btn').on('click', function () {
                // var data = $('#defaultForm').serialize(); // 类似get的url拼参数方式，需要转换json
                var data = $('#updateObjForm').serializeFormJSON();
                console.log(data);
                var checkedData = $('#updateTree').treeview('getChecked');
                console.log(checkedData);
                var ids = checkedData.map(function (item) {
                    return item.id;
                });

                $.ajax({
                    type: "put",
                    url: "/roles?ids=" + ids,
                    cache: false,
                    data: JSON.stringify(data),
                    dataType: "json",
                    contentType: 'application/json;charset=utf-8',
                    success: function (data) {
                        if (data.code == "0") {
                            // 正确的其他处理...
                            layer.msg(data.msg, {icon: 6});
                            $("#tb_base").bootstrapTable('refresh');
                            $('#updateObjModal').modal('hide');
                        } else {
                            // 错误的其他处理...
                            layer.msg(data.msg, {icon: 5});
                            $("#tb_base").bootstrapTable('refresh');
                        }
                    },
                    error: function (E) {
                        console.log(E);
                        layer.msg('提交系统失败，请稍后再试', {icon: 2});
                    }
                });
            });

            $('#btn_delete').on('click', function () {

                var selRows = $("#tb_base").bootstrapTable('getSelections');

                if (selRows.length == 0) {
                    layer.msg("请至少选择一行数据");
                    return false;
                }
                console.log(selRows);

                var postData = "";
                $.each(selRows, function (i) {
                    postData += this.id;
                    if (i < selRows.length - 1) {
                        postData += ",";
                    }
                });

                $.confirm({
                    title: '删除确认',
                    content: '请注意删除角色会同时清空角色与用户绑定关系、清空角色与菜单绑定关系，确认删除编号为[ ' + postData + ' ]的角色？！',
                    buttons: {
                        confirm: {
                            text: '确定删除',
                            btnClass: 'btn btn-danger',
                            action: function () {
                                $.ajax({
                                    type: "delete",
                                    url: "/roles/batch",
                                    cache: false,
                                    data: {'ids': postData},
                                    dataType: "json",
                                    contentType: 'application/x-www-form-urlencoded',
                                    success: function (data) {
                                        if (data.code == "0") {
                                            // 正确的其他处理...
                                            layer.msg(data.msg, {icon: 6});
                                            $("#tb_base").bootstrapTable('refresh');
                                        } else {
                                            // 错误的其他处理...
                                            layer.msg(data.msg, {icon: 5});
                                            $("#tb_base").bootstrapTable('refresh');
                                        }
                                    },
                                    error: function (E) {
                                        console.log(E);
                                        layer.msg('提交系统失败，请稍后再试', {icon: 2});
                                    }
                                });
                            }
                        },

                        cancel: {
                            text: '取消',
                            btnClass: 'btn btn-secondary',
                            action: function () {
                                // $.alert('取消!');
                            }
                        }
                    }
                });


            });

        },
        reloadTable: function () {
            $('#tb_base').bootstrapTable({
                classes: 'table table-bordered table-hover table-striped',
                url: '/roles',
                method: 'get',
                uniqueId: 'id',
                idField: 'id',             // 每行的唯一标识字段
                toolbar: '#toolbar',       // 工具按钮容器
                //clickToSelect: true,     // 是否启用点击选中行
                showColumns: true,         // 是否显示所有的列
                showRefresh: true,         // 是否显示刷新按钮
                showToggle: true,        // 是否显示详细视图和列表视图的切换按钮(clickToSelect同时设置为true时点击会报错)
                pagination: true,                    // 是否显示分页
                sortOrder: "asc",                    // 排序方式
                queryParams: function (params) {
                    var temp = {
                        limit: params.limit,
                        offset: params.offset,
                        pageSize: params.limit,   //页面大小
                        pageNum: (params.offset / params.limit) + 1,  //页码
                        isAsc: params.order,          // 排序方式'asc' 'desc'
                        orderByColumn: params.sort  // 排序的列名
                        , name: $("#name").val()
                        , remark: $("#remark").val()
                    };
                    return temp;
                },                                   // 传递参数
                sidePagination: "server",            // 分页方式：client客户端分页，server服务端分页
                pageNumber: 1,                       // 初始化加载第一页，默认第一页
                pageSize: 10,                        // 每页的记录行数
                pageList: [5, 10, 25, 50, 100],         // 可供选择的每页的行数
                //search: true,                      // 是否显示表格搜索，此搜索是客户端搜索
                //showExport: true,        // 是否显示导出按钮, 导出功能需要导出插件支持(tableexport.min.js)
                //exportDataType: "basic", // 导出数据类型, 'basic':当前页, 'all':所有数据, 'selected':选中的数据

                columns: [{
                    checkbox: true
                }, {
                    title: '序号',
                    align: 'center',
                    formatter: function (value, row, index) {
                        return index + 1;
                    }
                }, {
                    field: 'id',
                    align: 'center',
                    visible: false, // false不显示
                    title: '角色编号'
                }, {
                    field: 'name',
                    title: '角色名称'
                }, {
                    field: 'remark',
                    title: '角色说明'
                }, {
                    field: 'deptId',
                    title: '归属组织'
                }, {
                    field: 'creator',
                    title: '创建者'
                }, {
                    field: 'createDate',
                    title: '创建时间'
                }, {
                    field: 'updater',
                    title: '最近更改者'
                }, {
                    field: 'updateDate',
                    title: '最近更改时间'
                }],
                onLoadSuccess: function (data) {
                    $("[data-toggle='tooltip']").tooltip();
                }
            });
        },
        tableSearch: function () {
            $("#tb_base").bootstrapTable('refresh');
        },
        resetSearch: function () {
            $(".form-control input[type='text']").val("");
        }
    };

    page.init();

})(jQuery);

